package org.dromara.community.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import io.swagger.v3.oas.annotations.Operation;
import org.dromara.community.entity.AsSponsor;
import org.dromara.community.entity.dto.AsSponsorDTO;
import org.dromara.community.service.AsSponsorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 主办方信息
 */

@RestController
@RequestMapping("/asSponsor")
public class AsSponsorController {


    @Autowired
    private AsSponsorService asSponsorService;


    // 通过GET请求访问/selectAsSponsor路径
    @GetMapping("/selectAsSponsor")
// 定义操作摘要，用于API文档等
    @Operation(summary = "查询主办方信息")
// 忽略Security Authentication（安全认证）处理
    @SaIgnore
// 响应返回主办方信息列表
    public ResponseEntity<List<AsSponsorDTO>> selectAsSponsor() {
        // 返回主办方信息列表的HTTP响应
        return ResponseEntity.ok(asSponsorService.selectAsSponsorAll());
    }

    /**
     * 使用POST请求处理“insertAsSponsor”端点，用于新增主办方信息。
     * 该方法通过接收AsSponsor对象类型的请求体，调用asSponsorService的save方法来保存主办方信息，
     * 并根据保存结果返回不同的响应状态和消息。
     *
     * @param asSponsor 请求体，包含要新增的主办方信息，类型为AsSponsor。
     * @return 返回包含操作成功与否及相应消息的Map对象的ResponseEntity。
     */
    @PostMapping("insertAsSponsor")
    @Operation(summary = "新增主办方信息")
    public ResponseEntity<Map<String, Object>> insertAsSponsor(@RequestBody AsSponsor asSponsor) {
        // 尝试保存主办方信息，返回保存是否成功的布尔值
        boolean success = asSponsorService.save(asSponsor);

        // 初始化响应体
        Map<String, Object> response = new HashMap<>();
        // 将保存结果添加到响应体中
        response.put("success", success);

        // 根据保存结果添加相应消息到响应体，并返回不同的响应状态和消息
        if (success) {
            // 如果保存成功，添加成功消息并返回201状态（资源已创建）
            response.put("message", "主办方信息已成功添加。");
            return ResponseEntity.status(HttpStatus.CREATED).body(response);
        } else {
            // 如果保存失败，添加失败消息并返回500状态（服务器内部错误）
            response.put("message", "主办方信息添加失败。");
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }



}
